﻿<!DOCTYPE HTML>
<!-- saved from url=(0091)http://172.13.19.31:6060/note_html/服务器/CentOS/100901-打包、压缩、解压-tar、gzip命令.html -->
<!DOCTYPE html PUBLIC "" ""><HTML><HEAD><META content="IE=11.0000" 
http-equiv="X-UA-Compatible">
 
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<TITLE>10901-打包、压缩、解压-tar、gzip命令</TITLE> <LINK href="10901-打包、压缩、解压-tar、gzip命令_files/standalone.css" 
rel="stylesheet"> <LINK href="10901-打包、压缩、解压-tar、gzip命令_files/overlay-apple.css" 
rel="stylesheet"> <LINK href="10901-打包、压缩、解压-tar、gzip命令_files/article_edit.css" 
rel="stylesheet"> 
<STYLE type="text/css">
	#content{
		margin: 5px 10px;
	}
</STYLE>
	 <!-- 代码高亮 -->	 <LINK href="10901-打包、压缩、解压-tar、gzip命令_files/shCoreEclipse.css" 
rel="stylesheet">	 <LINK href="10901-打包、压缩、解压-tar、gzip命令_files/my-highlighter.css" 
rel="stylesheet"> 
<META name="GENERATOR" content="MSHTML 11.00.10586.545"></HEAD> 
<BODY>
<DIV id="content">
<H1 align="center">10901-打包、压缩、解压-tar、gzip命令</H1>
<P align="right" 
style="margin: 0px 10px 0px 0px; padding: 0px;">最后修改时间：2015-08-14 11:32:45</P>
<HR style="border-width: 2px; border-color: lime;">

<H3>tar命令</H3>
<H4>命令说明</H4>
<PRE class="brush: bash;">通过SSH访问服务器，难免会要用到压缩，解压缩，打包，解包等，这时候tar命令就是是必不可少的一个功能强大的工具。linux中最流行的tar是麻雀虽小，五脏俱全，功能强大。

tar命令可以为linux的文件和目录创建档案。利用tar，可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。
tar最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于备份文件或将
几个文件组合成为一个文件以便于网络传输是非常有用的。

首先要弄清两个概念：打包和压缩。打包是指将一大堆文件或目录变成一个总的文件；压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢？这源于Linux中很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文件时，你得先将这一大堆文件先打成一个包（tar命令），
然后再用压缩程序进行压缩（gzip bzip2命令）。

linux下最常用的打包程序就是tar了，使用tar程序打出来的包我们常称为tar包，tar包文件的命令通常都是以.tar结尾的。生成tar包后，就可以用其它的程序来进行压缩。

1．命令格式：

tar[必要参数][选择参数][文件] 

2．命令功能：

用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的 

3．命令参数：

必要参数有如下：

-A 新增压缩文件到已存在的压缩

-B 设置区块大小

-c 建立新的压缩文件

-d 记录文件的差别

-r 添加文件到已经压缩的文件

-u 添加改变了和现有的文件到已经存在的压缩文件

-x 从压缩的文件中提取文件

-t 显示压缩文件的内容

-z 支持gzip解压文件

-j 支持bzip2解压文件

-Z 支持compress解压文件

-v 显示操作过程

-l 文件系统边界设置

-k 保留原有文件不覆盖

-m 保留文件不被覆盖

-W 确认压缩文件的正确性

可选参数如下：

-b 设置区块数目

-C 切换到指定目录

-f 指定压缩文件

--help 显示帮助信息

--version 显示版本信息
</PRE>
<H4>常见解压/压缩命令</H4>
<PRE class="brush: bash;">tar 
解包：tar xvf FileName.tar
打包：tar cvf FileName.tar DirName
（注：tar是打包，不是压缩！）


.gz
解压1：gunzip FileName.gz
解压2：gzip -d FileName.gz
压缩：gzip FileName

.tar.gz 和 .tgz
解压：tar zxvf FileName.tar.gz
压缩：tar zcvf FileName.tar.gz DirName

.bz2
解压1：bzip2 -d FileName.bz2
解压2：bunzip2 FileName.bz2
压缩： bzip2 -z FileName

.tar.bz2
解压：tar jxvf FileName.tar.bz2
压缩：tar jcvf FileName.tar.bz2 DirName

.bz
解压1：bzip2 -d FileName.bz
解压2：bunzip2 FileName.bz
压缩：未知

.tar.bz
解压：tar jxvf FileName.tar.bz
压缩：未知

.Z
解压：uncompress FileName.Z
压缩：compress FileName

.tar.Z
解压：tar Zxvf FileName.tar.Z
压缩：tar Zcvf FileName.tar.Z DirName

.zip
解压：unzip FileName.zip
压缩：zip FileName.zip DirName

.rar
解压：rar x FileName.rar
压缩：rar a FileName.rar DirName 
</PRE>
<H4>使用实例</H4>
<PRE class="brush: bash;">实例1：将文件全部打包成tar包

命令：

tar -cvf log.tar log2012.log

tar -zcvf log.tar.gz log2012.log

tar -jcvf log.tar.bz2 log2012.log

输出：

[root@localhost test]# ls -al log2012.log

---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log

[root@localhost test]# tar -cvf log.tar log2012.log 

log2012.log

[root@localhost test]# tar -zcvf log.tar.gz log2012.log

log2012.log

[root@localhost test]# tar -jcvf log.tar.bz2 log2012.log 

log2012.log

[root@localhost test]# ls -al *.tar*

-rw-r--r-- 1 root root 307200 11-29 17:54 log.tar

-rw-r--r-- 1 root root   1413 11-29 17:55 log.tar.bz2

-rw-r--r-- 1 root root   1413 11-29 17:54 log.tar.gz

说明：

tar -cvf log.tar log2012.log    仅打包，不压缩！ 

tar -zcvf log.tar.gz log2012.log   打包后，以 gzip 压缩 

tar -zcvf log.tar.bz2 log2012.log  打包后，以 bzip2 压缩 

在参数 f 之后的文件档名是自己取的，我们习惯上都用 .tar 来作为辨识。 如果加 z 参数，则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包； 
如果加 j 参数，则以 .tar.bz2 来作为tar包名。

实例2：查阅上述 tar包内有哪些文件

命令：

tar -ztvf log.tar.gz

输出：

[root@localhost test]# tar -ztvf log.tar.gz

---xrw-r-- root/root    302108 2012-11-13 06:03:25 log2012.log

说明：

由于我们使用 gzip 压缩的log.tar.gz，所以要查阅log.tar.gz包内的文件时，就得要加上 z 这个参数了。

实例3：将tar 包解压缩

命令：

tar -zxvf /opt/soft/test/log.tar.gz

输出：

[root@localhost test3]# ll

总计 0[root@localhost test3]# tar -zxvf /opt/soft/test/log.tar.gz

log2012.log

[root@localhost test3]# ls

log2012.log

[root@localhost test3]#

说明：

在预设的情况下，我们可以将压缩档在任何地方解开的

实例4：只将 /tar 内的 部分文件解压出来

命令：

tar -zxvf /opt/soft/test/log30.tar.gz log2013.log

输出：

[root@localhost test]# tar -zcvf log30.tar.gz log2012.log log2013.log 

log2012.log

log2013.log

[root@localhost test]# ls -al log30.tar.gz 

-rw-r--r-- 1 root root 1512 11-30 08:19 log30.tar.gz

[root@localhost test]# tar -zxvf log30.tar.gz log2013.log

log2013.log

[root@localhost test]# ll

-rw-r--r-- 1 root root   1512 11-30 08:19 log30.tar.gz

[root@localhost test]# cd test3

[root@localhost test3]# tar -zxvf /opt/soft/test/log30.tar.gz log2013.log

log2013.log

[root@localhost test3]# ll

总计 4

-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log

[root@localhost test3]#

说明：

我可以透过 tar -ztvf 来查阅 tar 包内的文件名称，如果单只要一个文件，就可以透过这个方式来解压部分文件！

实例5：文件备份下来，并且保存其权限

命令：

tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log 

输出：

[root@localhost test]# ll

总计 0

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

-rw-r--r-- 1 root root      0 11-16 14:41 log2016.log

[root@localhost test]# tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log 

log2014.log

log2015.log

log2016.log

[root@localhost test]# cd test6

[root@localhost test6]# ll

[root@localhost test6]# tar -zxvpf /opt/soft/test/log31.tar.gz 

log2014.log

log2015.log

log2016.log

[root@localhost test6]# ll

总计 0

-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log

-rw-r--r-- 1 root root 0 11-16 14:41 log2016.log

[root@localhost test6]#

说明：

这个 -p 的属性是很重要的，尤其是当您要保留原本文件的属性时

实例6：在 文件夹当中，比某个日期新的文件才备份

命令：

tar -N "2012/11/13" -zcvf log17.tar.gz test

输出：

[root@localhost soft]# tar -N "2012/11/13" -zcvf log17.tar.gz test

tar: Treating date `2012/11/13' as 2012-11-13 00:00:00 + 0 nanoseconds

test/test/log31.tar.gz

test/log2014.log

test/linklog.log

test/log2015.log

test/log2013.log

test/log2012.log

test/log2017.log

test/log2016.log

test/log30.tar.gz

test/log.tar

test/log.tar.bz2

test/log.tar.gz

说明：

实例7：备份文件夹内容是排除部分文件

命令：

tar --exclude scf/service -zcvf scf.tar.gz scf/*

输出：

[root@localhost test]# tree scf

scf

|-- bin

|-- doc

|-- lib

`-- service

   	 `-- deploy

       	 	|-- info

       	 	`-- product

7 directories, 0 files

[root@localhost test]# tar --exclude scf/service -zcvf scf.tar.gz scf/* 

scf/bin/

scf/doc/

scf/lib/

[root@localhost test]#
</PRE>
<H3>gzip命令</H3>
<H4>命令说明</H4>
<PRE class="brush: bash;">减少文件大小有两个明显的好处，一是可以减少存储空间，二是通过网络传输文件时，可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩
和解压缩的命令，既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间，还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。
据统计，gzip命令对文本文件有60%～70%的压缩率。

1．命令格式：

gzip[参数][文件或者目录]

2．命令功能：

gzip是个使用广泛的压缩程序，文件经它压缩过后，其名称后面会多出".gz"的扩展名。

3．命令参数：

-a或--ascii 　使用ASCII文字模式。 

-c或--stdout或--to-stdout 　把压缩后的文件输出到标准输出设备，不去更动原始文件。 

-d或--decompress或----uncompress 　解开压缩文件。 

-f或--force 　强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。 

-h或--help 　在线帮助。 

-l或--list 　列出压缩文件的相关信息。 

-L或--license 　显示版本与版权信息。 

-n或--no-name 　压缩文件时，不保存原来的文件名称及时间戳记。 

-N或--name 　压缩文件时，保存原来的文件名称及时间戳记。 

-q或--quiet 　不显示警告信息。 

-r或--recursive 　递归处理，将指定目录下的所有文件及子目录一并处理。 

-S&lt;压缩字尾字符串&gt;或----suffix&lt;压缩字尾字符串&gt; 　更改压缩字尾字符串。 

-t或--test 　测试压缩文件是否正确无误。 

-v或--verbose 　显示指令执行过程。 

-V或--version 　显示版本信息。 

-num 用指定的数字num调整压缩的速度，-1或--fast表示最快压缩方法（低压缩比），-9或--best表示最慢压缩方法（高压缩比）。系统缺省值为6。
</PRE>
<H4>使用实例</H4>
<PRE class="brush: bash;">实例1：把test6目录下的每个文件压缩成.gz文件

命令：

gzip *

输出：

[root@localhost test6]# ll

总计 604

---xr--r-- 1 root mail  302108 11-30 08:39 linklog.log

---xr--r-- 1 mail users 302108 11-30 08:39 log2012.log

-rw-r--r-- 1 mail users     61 11-30 08:39 log2013.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2014.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2015.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2016.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2017.log

[root@localhost test6]# gzip *

[root@localhost test6]# ll

总计 28

---xr--r-- 1 root mail  1341 11-30 08:39 linklog.log.gz

---xr--r-- 1 mail users 1341 11-30 08:39 log2012.log.gz

-rw-r--r-- 1 mail users   70 11-30 08:39 log2013.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2014.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2015.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2016.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2017.log.gz

[root@localhost test6]#

说明：

实例2：把例1中每个压缩的文件解压，并列出详细的信息

命令：

gzip -dv *

输出：

[root@localhost test6]# ll

总计 28

---xr--r-- 1 root mail  1341 11-30 08:39 linklog.log.gz

---xr--r-- 1 mail users 1341 11-30 08:39 log2012.log.gz

-rw-r--r-- 1 mail users   70 11-30 08:39 log2013.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2014.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2015.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2016.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2017.log.gz

[root@localhost test6]# gzip -dv *

linklog.log.gz:  99.6% -- replaced with linklog.log

log2012.log.gz:  99.6% -- replaced with log2012.log

log2013.log.gz:  47.5% -- replaced with log2013.log

log2014.log.gz:   0.0% -- replaced with log2014.log

log2015.log.gz:   0.0% -- replaced with log2015.log

log2016.log.gz:   0.0% -- replaced with log2016.log

log2017.log.gz:   0.0% -- replaced with log2017.log

[root@localhost test6]# ll

总计 604

---xr--r-- 1 root mail  302108 11-30 08:39 linklog.log

---xr--r-- 1 mail users 302108 11-30 08:39 log2012.log

-rw-r--r-- 1 mail users     61 11-30 08:39 log2013.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2014.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2015.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2016.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2017.log

[root@localhost test6]#

说明：

实例3：详细显示例1中每个压缩的文件的信息，并不解压

命令：

gzip -l *

输出：

[root@localhost test6]# gzip -l *

         compressed        uncompressed  ratio uncompressed_name

               1341              302108  99.6% linklog.log

               1341              302108  99.6% log2012.log

                 70                  61  47.5% log2013.log

                 32                   0   0.0% log2014.log

                 32                   0   0.0% log2015.log

                 32                   0   0.0% log2016.log

                 32                   0   0.0% log2017.log

               2880              604277  99.5% (totals)

说明：

实例4：压缩一个tar备份文件，此时压缩文件的扩展名为.tar.gz

命令：

gzip -r log.tar

输出：

[root@localhost test]# ls -al log.tar

-rw-r--r-- 1 root root 307200 11-29 17:54 log.tar

[root@localhost test]# gzip -r log.tar

[root@localhost test]# ls -al log.tar.gz 

-rw-r--r-- 1 root root 1421 11-29 17:54 log.tar.gz

说明：

实例5：递归的压缩目录

命令：

gzip -rv test6

输出：

[root@localhost test6]# ll

总计 604

---xr--r-- 1 root mail  302108 11-30 08:39 linklog.log

---xr--r-- 1 mail users 302108 11-30 08:39 log2012.log

-rw-r--r-- 1 mail users     61 11-30 08:39 log2013.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2014.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2015.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2016.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2017.log

[root@localhost test6]# cd ..

[root@localhost test]# gzip -rv test6

test6/log2014.log:        0.0% -- replaced with test6/log2014.log.gz

test6/linklog.log:       99.6% -- replaced with test6/linklog.log.gz

test6/log2015.log:        0.0% -- replaced with test6/log2015.log.gz

test6/log2013.log:       47.5% -- replaced with test6/log2013.log.gz

test6/log2012.log:       99.6% -- replaced with test6/log2012.log.gz

test6/log2017.log:        0.0% -- replaced with test6/log2017.log.gz

test6/log2016.log:        0.0% -- replaced with test6/log2016.log.gz

[root@localhost test]# cd test6

[root@localhost test6]# ll

总计 28

---xr--r-- 1 root mail  1341 11-30 08:39 linklog.log.gz

---xr--r-- 1 mail users 1341 11-30 08:39 log2012.log.gz

-rw-r--r-- 1 mail users   70 11-30 08:39 log2013.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2014.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2015.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2016.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2017.log.gz

说明：

这样，所有test下面的文件都变成了*.gz，目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩，和打包不同。因为是对目录操作，所以需要加上-r选项，这样也可以对子目录进行递归了。 

实例6：递归地解压目录

命令：

gzip -dr test6

输出：

[root@localhost test6]# ll

总计 28

---xr--r-- 1 root mail  1341 11-30 08:39 linklog.log.gz

---xr--r-- 1 mail users 1341 11-30 08:39 log2012.log.gz

-rw-r--r-- 1 mail users   70 11-30 08:39 log2013.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2014.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2015.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2016.log.gz

-rw-r--r-- 1 root mail    32 11-30 08:39 log2017.log.gz

[root@localhost test6]# cd ..

[root@localhost test]# gzip -dr test6

[root@localhost test]# cd test6

[root@localhost test6]# ll

总计 604

---xr--r-- 1 root mail  302108 11-30 08:39 linklog.log

---xr--r-- 1 mail users 302108 11-30 08:39 log2012.log

-rw-r--r-- 1 mail users     61 11-30 08:39 log2013.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2014.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2015.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2016.log

-rw-r--r-- 1 root mail       0 11-30 08:39 log2017.log

[root@localhost test6]#
</PRE>
<HR style="border-width: 2px; border-color: lime;">

<DIV align="center">©copyright 2013 ~ 2015 作者：zzy</DIV>
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shCore.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushJava.js" type="text/javascript"></SCRIPT>
	
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushJScript.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushXml.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushSql.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/syntaxhighlighter/scripts/shBrushBash.js" type="text/javascript"></SCRIPT>
	
<SCRIPT src="../../pub/syntaxhighlighter/init.js" type="text/javascript"></SCRIPT>
 
<SCRIPT src="../../pub/js/jquery.tools.min.js" type="text/javascript"></SCRIPT>
 <!-- make all links with the 'rel' attribute open overlays --> 
<SCRIPT>
  $(function() {
      $("#apple img[rel]").overlay({effect: 'apple'});
    });
</SCRIPT>
 </DIV></BODY></HTML>
